The eyes of Piko, my black cat gazing out from a dark green background.
  • Home
  • Projects
  • Wildlife Photography
  • Resume

On this page

  • Purpose
    • Skills and Techniques Demonstrated
    • Part 1: Legacy of redlining in current environmental (in)justice
      • Map of Historical Redlining in Los Angeles County
      • Map Interpretation
      • Results Interpretation
    • Part 2: Legacy of redlining in biodiversity observations
  • Discussion
  • Acknowledgements
    • Data
    • Citations

Redlining & Biodiversity in L.A.

Exploring patterns of environmental justice

Geospatial Analysis
R
Skill Demonstration: Build effective, responsible, accessible and aesthetically-pleasing maps | Manipulate vector and raster data to build multi-layer maps | Spatial analysis between vector and raster datasets
Author

Steven Mitchell

Published

October 19, 2024

A scan of a Home Owners’ Loan Corporation (HOLC) map in the public domain and downloaded from the National Archives City Survey Files, 1935-1940

Purpose

This repository demonstrates my analysis of historical redlining in Los Angeles and its modern day impacts to community health and biodiversity metrics.

Skills and Techniques Demonstrated

  • Build effective, responsible, accessible and aesthetically-pleasing maps
  • Manipulate vector and raster data to build multi-layer maps
  • Spatial analysis between vector and raster datasets
Code
# load packages
library(sf)
library(tidyverse)
library(tmap)
library(here)
library(viridisLite)

Part 1: Legacy of redlining in current environmental (in)justice

Code
# Load & Filter EJScreen Data
ej_la <- read_sf(here("data", "ejscreen", "EJSCREEN_2023_BG_StatePct_with_AS_CNMI_GU_VI.gdb")) %>% 
  dplyr::filter(ST_ABBREV == "CA") %>% # filter to CA
  dplyr::filter(CNTY_NAME == "Los Angeles County") %>% # filter to LA County
  st_make_valid() # make valid for mapping

# Load & wrangle Redlining Data
rl_data <- st_read(here("data", "mapping-inequality", "mapping-inequality-los-angeles.json")) %>% 
  st_make_valid() # make valid for mapping

# reproject redlining data to match EJScreen CRS
rl_transformed <- st_transform(rl_data, crs = st_crs(ej_la)) 

# dissolve to LA County and calculate average values
la_county <- aggregate(ej_la, by = list(ej_la$CNTY_NAME), FUN = mean)

# CRS consistency check
if(st_crs(ej_la) == st_crs(rl_transformed)) {
  print("coordinate reference systems match")
} else{
  error("coordinate reference systems do not match")
}

Map of Historical Redlining in Los Angeles County

Home Owners’ Loan Corporation (HOLC) rating ranking system, (A (green), B (blue), C (yellow), D (red)) was used to block access to loans for home ownership. This practice was known as “Redlining”

Code
tmap_mode("view")

map_la <- tm_basemap("Esri")+
#  tm_shape(ej_la)+
#  tm_polygons(col = "LOWINCOME",
#              palette = mako(3000, direction = -1),
#              title = "Percent Low Income")+
  tm_shape(rl_data)+
  tm_polygons(col = "grade",
              palette = c("green", "blue", "yellow", "darkred"),
              alpha = 0.5,
              title = "HOLC Code")+
  tm_shape(la_county)+
  tm_borders(lwd = 4) +
  tm_layout(main.title = "Historical Redlining in Los Angeles County",
            legend.frame = TRUE)+
  tm_scale_bar(position = c("left", "bottom"))

tmap_save(map_la, "map_la.html")

Redlining in Los Angeles County

Map Interpretation

Redlined neighborhoods constitute 15.3% of the total population in and 15% of census blocks in Los Angeles County. Many Redlined neighborhoods are in high density urban centers such as East LA and/or adjacent to industrial zones such as the port of Long Beach.

HOLC Rating Census Blocks % of Census Blocks
A 449 5%
B 1239 13.8%
C 3058 34%
D 1346 15%
NA 2896 32.2%
Code
# join the redlining categories onto the EJ Screen data
ej_rl_leftjoin <- st_join(ej_la, rl_transformed)

# make a table of census blocks vs RL neighborhoods
table_blocks <- ej_rl_leftjoin %>%
  group_by(grade) %>%
  summarise(n_blocks = n()) %>% # count census blocks within each redlining category
  st_drop_geometry() %>% # remove the geometries so the math works
  mutate(percent_blocks = n_blocks/sum(n_blocks) * 100) # calculate percentages by RL category

# make a table of population totals
table_pop <- ej_rl_leftjoin %>% 
  group_by(grade) %>% 
  summarise(pop = sum(ACSTOTPOP)) %>% # calculate sum population by HOLC rating
  st_drop_geometry()%>% # remove the geometries so the math works
  mutate(percent_pop = pop/sum(pop) * 100) # calculate percentages by RL category

# make a table of percentile low income
table_lowinc <- ej_rl_leftjoin %>% 
  group_by(grade) %>% 
  summarise(income = mean(LOWINCPCT)) %>% # calculate average percentage of low income
  st_drop_geometry()

# make a table of percentile PM2.5
table_pm25 <- ej_rl_leftjoin %>% 
  group_by(grade) %>% 
  summarise(pm = mean(P_PM25)) %>% # calculate average 2.5 particulate matter
  st_drop_geometry()

# make a table of percentile low life expectancy
table_life_exp <- ej_rl_leftjoin %>% 
  drop_na(P_LIFEEXPPCT) %>% 
  group_by(grade) %>% 
  summarise(life_exp = mean(P_LIFEEXPPCT)) %>% # calculate average low life expectancy
  st_drop_geometry()
Code
# make figures

chart_low_inc <- ggplot(table_lowinc)+
  geom_col(aes(x=grade, y = income))+
  labs(x="HOLC Rating", y="Percent Low Income")+
  theme_bw()

ggsave("chart_low_inc.png", chart_low_inc)

chart_pm25 <- ggplot(table_pm25)+
  geom_col(aes(x=grade, y = pm))+
  labs(x="HOLC Rating", y="Percentile for Particulate Matter 2.5 Exposure")+
  theme_bw()

ggsave("chart_pm25.png", chart_pm25)

chart_life_exp <- ggplot(table_life_exp)+
  geom_col(aes(x = grade, y = life_exp))+
  labs(x = "HOLC Rating", y = "Percentile for Low Life Expectancy")+
  theme_bw()

ggsave("chart_life_exp.png", chart_life_exp)

Percent Low Income by HOLC rating.

Percentile of Particulate Matter 2.5 by HOLC rating.

Percentile of low life expectancy by HOLC rating.

Results Interpretation

Redlined neighborhoods (HOLC D) are the highest in percent low income, percentile of particulate matter exposure, and percentile for low life expectancy. Together, these points indicate that the most vulnerable people (low income) experience the most air quality risk (PM 2.5 exposure) and the lowest life expectancy compared to other parts of Los Angeles County. The impacts of Redlining are lethal.

Part 2: Legacy of redlining in biodiversity observations

Code
#load, wrangle, and inspect data
birds <- read_sf(here("data", "gbif-birds-LA")) %>% 
  filter(year == 2022) 

# reproject CRS
birds_transformed <- st_transform(birds, crs = st_crs(ej_la))

# CRS consistency check
if(st_crs(rl_transformed) == st_crs(birds_transformed)) {
  print("coordinate reference systems match")
} else{
  error("coordinate reference systems do not match")
}

# join the data
birds_rl_leftjoin <- st_join(rl_transformed, birds_transformed)

# summarize in a table
table_birds <- birds_rl_leftjoin %>%
  group_by(grade) %>%
  summarise(bird_obs = n()) %>% # count census blocks within each redlining category
  st_drop_geometry() %>% # remove the geometries so the math works
  mutate(percent_obs= bird_obs/sum(bird_obs) * 100) # calculate percentages by RL category

# chart the data
chart_birds <- ggplot(table_birds)+
  geom_col(aes(x=grade, y = percent_obs))+
  labs(x = "HOLC rating", y = "Percentage of Bird Observations")+
  theme_bw()

ggsave("chart_birds.png", chart_birds)

Bird observations across HOLC ratings.

Discussion

These results do not match the findings from Ellis-Soto et al. 2023. Whereas that study found that historically redlined neighborhoods were drastically under-surveyed in citizen science, these results show the second highest number of bird observations in those same redlined neighborhoods. This is surprising because of the human health impacts illustrated in Part 1. There could be a number of possible explanations for the discrepancy, one of which could be disparate vulnerabilities to air pollution between humans and birds.

Acknowledgements

This analysis and workflow was originally created by Dr. Ruth Oliver of the Bren School of Environmental Science & Management for the Masters of Environmental Data Science course, Geospatial Analysis and Remote Sensing. My initial work through of this analysis was conducted as part of a homework assignment for this class, and I later polished up this repository.

Data

The data used in this analysis is too large to be hosted on GitHub. Instead, download the data here as a zipped folder, unzip, and move into the R project manually.

Citations

Data Citation Link
EJ Screen U.S. Environmental Protection Agency (EPA), 2023. EJScreen Technical Documentation. https://www.epa.gov/ejscreen
Mapping Inequality Nelson, Robert K., LaDale Winling, et al. “Mapping Inequality: Redlining in New Deal America.” Edited by Robert K. Nelson and Edward L. Ayers. American Panorama: An Atlas of United States History, 2023. https://dsl.richmond.edu/panorama/redlining. https://www.epa.gov/ejscreen
GBIF Bird Observations GBIF.org (year), GBIF Home Page. Available from: https://www.gbif.org [13 January 2020]. https://www.gbif.org/

Citation

BibTeX citation:
@online{mitchell2024,
  author = {Mitchell, Steven},
  title = {Redlining \& {Biodiversity} in {L.A.}},
  date = {2024-10-19},
  url = {https://steven-mitchell.github.io/projects/redlining-and-biodiversity-in-la/},
  langid = {en}
}
For attribution, please cite this work as:
Mitchell, Steven. 2024. “Redlining & Biodiversity in L.A.” October 19, 2024. https://steven-mitchell.github.io/projects/redlining-and-biodiversity-in-la/.

Copyright 2024, Steven Mitchell

 

This website and everything contained here was coded by me in R and hosted via GitHub. All photos found here are also my intellectual property.